package view;

import model.Poker;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 游戏窗口
 */
public class GameFrame extends JFrame {
    public GameFrame() {
        // 顶部面板，放置一个扑克牌图片
        JPanel topPanel = new JPanel(new BorderLayout()) {{
            add(new JLabel(new ImageIcon(Poker.rearImage)), BorderLayout.CENTER);
        }};
        // 扑克面板，位于中间。显示电脑与玩家的牌
        PokerPanel pokerPanel = new PokerPanel();
        pokerPanel.setLayout(new BorderLayout());
        // 底部面板，显示按钮
        JPanel bottomPanel = new JPanel(new FlowLayout());
        JButton bt1 = new JButton("玩家要牌") {{
            setEnabled(false);
        }};
        JButton bt2 = new JButton("玩家停牌") {{
            setEnabled(false);
        }};
        JButton bt3 = new JButton("开始游戏");
        JButton bt4 = new JButton("退出游戏");
        bottomPanel.add(bt1);
        bottomPanel.add(bt2);
        bottomPanel.add(bt3);
        bottomPanel.add(bt4);
        // 将面板添加到窗口
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(topPanel, BorderLayout.NORTH);
        this.getContentPane().add(pokerPanel, BorderLayout.CENTER);
        this.getContentPane().add(bottomPanel, BorderLayout.SOUTH);

        //设置窗口样式
        this.setSize(700, 700);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("21点扑克牌游戏");
        this.setVisible(true);
        // 设置窗口居中
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        this.setBounds((width - 700) / 2,
                (height - 700) / 2, 700, 700);

        // 设置玩家要牌动作
        bt1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pokerPanel.deal();
                // 要牌后可能超过21点结束游戏，故尝试计算结果，计算成功则将按钮设置为不可点击
                if (pokerPanel.statistics()) {
                    bt1.setEnabled(false);
                    bt2.setEnabled(false);
                }
            }
        });
        // 设置玩家停牌动作
        bt2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pokerPanel.playerStopDeal();
                bt1.setEnabled(false);
                bt2.setEnabled(false);
                // 玩家停牌继续给电脑发牌直至结束
                while (!pokerPanel.notNeed()) {
                    pokerPanel.deal();
                }
                pokerPanel.statistics();
            }
        });
        // 设置开始游戏动作
        bt3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 重置面板
                pokerPanel.reset();
                pokerPanel.deal();
                pokerPanel.deal();
                bt1.setEnabled(true);
                bt2.setEnabled(true);
            }
        });
        // 设置退出游戏动作
        bt4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
    }
}